{"cells":[{"metadata":{},"cell_type":"markdown","source":"## DM 4 - Première NSI - A rendre le mardi 14 janvier 2025 (Correction) \n\n\n## Question 1\nÉcrire une fonction `trouver_minimum` qui retourne le minimum d'une liste donnée."},{"metadata":{"trusted":false},"cell_type":"code","source":"# Fonction pour trouver le maximum dans une liste\ndef trouver_minimum(liste):\n min_val = liste[0]\n for val in liste:\n if val < min_val:\n min_val = val\n return min_val\n\n# test\ntrouver_minimum([42, 17, 8, 23, 56, 34, 12, 89, 5, 31])","execution_count":11,"outputs":[{"output_type":"execute_result","execution_count":11,"data":{"text/plain":"5"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"## Question 2\nUtiliser la fonction `trouver_minimum` pour implémenter la fonction `tri_simple` qui trie en remplissant une nouvelle liste vide à l'aide des instruction `append` et `remove`."},{"metadata":{"trusted":false},"cell_type":"code","source":"# Fonction de tri autre que par insertion et sélection (tri simple avec liste vide et append)\ndef tri_simple(liste):\n resultat = []\n while liste:\n min_val = trouver_minimum(liste)\n resultat.append(min_val)\n liste.remove(min_val)\n return resultat\n\n# test\ntri_simple([42, 17, 8, 23, 56, 34, 12, 89, 5, 31])","execution_count":12,"outputs":[{"output_type":"execute_result","execution_count":12,"data":{"text/plain":"[5, 8, 12, 17, 23, 31, 34, 42, 56, 89]"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"## Question 3\nÉcrire la fonction de tri par **sélection** et celle de tri par **insertion**."},{"metadata":{"trusted":false},"cell_type":"code","source":"# Tri par sélection\ndef tri_selection(liste):\n for i in range(len(liste)):\n min_index = i\n for j in range(i + 1, len(liste)):\n if liste[j] < liste[min_index]:\n min_index = j\n liste[i], liste[min_index] = liste[min_index], liste[i]\n return liste\n\n# test\ntri_selection([42, 17, 8, 23, 56, 34, 12, 89, 5, 31])","execution_count":13,"outputs":[{"output_type":"execute_result","execution_count":13,"data":{"text/plain":"[5, 8, 12, 17, 23, 31, 34, 42, 56, 89]"},"metadata":{}}]},{"metadata":{"trusted":false},"cell_type":"code","source":"# Tri par insertion\ndef tri_insertion(liste):\n for i in range(1, len(liste)):\n cle = liste[i]\n j = i - 1\n while j >= 0 and cle < liste[j]:\n liste[j + 1] = liste[j]\n j -= 1\n liste[j + 1] = cle\n return liste\n\n# test\ntri_insertion([42, 17, 8, 23, 56, 34, 12, 89, 5, 31])","execution_count":14,"outputs":[{"output_type":"execute_result","execution_count":14,"data":{"text/plain":"[5, 8, 12, 17, 23, 31, 34, 42, 56, 89]"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"## Question 4\nÀ partir du dictionnaire suivant :\n\n```python\ndonnees = [\n {\"ville\": \"Paris\", \"superficie\": 105.4, \"habitants\": 2148000},\n {\"ville\": \"Marseille\", \"superficie\": 240.62, \"habitants\": 870018},\n {\"ville\": \"Lyon\", \"superficie\": 47.87, \"habitants\": 522228},\n {\"ville\": \"Toulouse\", \"superficie\": 118.3, \"habitants\": 471941},\n {\"ville\": \"Nice\", \"superficie\": 71.92, \"habitants\": 342669},\n {\"ville\": \"Nantes\", \"superficie\": 65.19, \"habitants\": 303382},\n {\"ville\": \"Strasbourg\", \"superficie\": 78.26, \"habitants\": 280966},\n {\"ville\": \"Montpellier\", \"superficie\": 56.88, \"habitants\": 285121},\n {\"ville\": \"Bordeaux\", \"superficie\": 49.36, \"habitants\": 254436},\n {\"ville\": \"Lille\", \"superficie\": 34.83, \"habitants\": 233897},\n {\"ville\": \"Rennes\", \"superficie\": 50.39, \"habitants\": 217728},\n {\"ville\": \"Reims\", \"superficie\": 46.9, \"habitants\": 184076},\n {\"ville\": \"Le Havre\", \"superficie\": 46.95, \"habitants\": 169733},\n {\"ville\": \"Saint-Étienne\", \"superficie\": 79.97, \"habitants\": 173089},\n {\"ville\": \"Toulon\", \"superficie\": 42.84, \"habitants\": 176198}\n]\n```\nModifier la fonction de tri par sélection en ``tri_selection_dictionnaire`` pour trier la liste ``donnees`` par **ordre alphabétique des villes**."},{"metadata":{"trusted":false},"cell_type":"code","source":"# Modification du tri par sélection pour trier un dictionnaire\ndef tri_selection_dictionnaire(liste):\n for i in range(len(liste)):\n min_index = i\n for j in range(i + 1, len(liste)):\n if liste[j]['ville'] < liste[min_index]['ville']:\n min_index = j\n liste[i], liste[min_index] = liste[min_index], liste[i]\n return liste\n\n\n# Exemple de données\ndonnees = [\n {\"ville\": \"Paris\", \"superficie\": 105.4, \"habitants\": 2148000},\n {\"ville\": \"Marseille\", \"superficie\": 240.62, \"habitants\": 870018},\n {\"ville\": \"Lyon\", \"superficie\": 47.87, \"habitants\": 522228},\n {\"ville\": \"Toulouse\", \"superficie\": 118.3, \"habitants\": 471941},\n {\"ville\": \"Nice\", \"superficie\": 71.92, \"habitants\": 342669},\n {\"ville\": \"Nantes\", \"superficie\": 65.19, \"habitants\": 303382},\n {\"ville\": \"Strasbourg\", \"superficie\": 78.26, \"habitants\": 280966},\n {\"ville\": \"Montpellier\", \"superficie\": 56.88, \"habitants\": 285121},\n {\"ville\": \"Bordeaux\", \"superficie\": 49.36, \"habitants\": 254436},\n {\"ville\": \"Lille\", \"superficie\": 34.83, \"habitants\": 233897},\n {\"ville\": \"Rennes\", \"superficie\": 50.39, \"habitants\": 217728},\n {\"ville\": \"Reims\", \"superficie\": 46.9, \"habitants\": 184076},\n {\"ville\": \"Le Havre\", \"superficie\": 46.95, \"habitants\": 169733},\n {\"ville\": \"Saint-Étienne\", \"superficie\": 79.97, \"habitants\": 173089},\n {\"ville\": \"Toulon\", \"superficie\": 42.84, \"habitants\": 176198}\n]\n\n\n# Test : Tri par ordre alphabétique des villes\ntri_ville = tri_selection_dictionnaire(donnees)\nprint(\"Tri par ordre alphabétique des villes:\", tri_ville)","execution_count":21,"outputs":[{"output_type":"stream","text":"Tri par ordre alphabétique des villes: [{'ville': 'Bordeaux', 'superficie': 49.36, 'habitants': 254436}, {'ville': 'Le Havre', 'superficie': 46.95, 'habitants': 169733}, {'ville': 'Lille', 'superficie': 34.83, 'habitants': 233897}, {'ville': 'Lyon', 'superficie': 47.87, 'habitants': 522228}, {'ville': 'Marseille', 'superficie': 240.62, 'habitants': 870018}, {'ville': 'Montpellier', 'superficie': 56.88, 'habitants': 285121}, {'ville': 'Nantes', 'superficie': 65.19, 'habitants': 303382}, {'ville': 'Nice', 'superficie': 71.92, 'habitants': 342669}, {'ville': 'Paris', 'superficie': 105.4, 'habitants': 2148000}, {'ville': 'Reims', 'superficie': 46.9, 'habitants': 184076}, {'ville': 'Rennes', 'superficie': 50.39, 'habitants': 217728}, {'ville': 'Saint-Étienne', 'superficie': 79.97, 'habitants': 173089}, {'ville': 'Strasbourg', 'superficie': 78.26, 'habitants': 280966}, {'ville': 'Toulon', 'superficie': 42.84, 'habitants': 176198}, {'ville': 'Toulouse', 'superficie': 118.3, 'habitants': 471941}]\n","name":"stdout"}]},{"metadata":{},"cell_type":"markdown","source":"## Question 5\nÀ partir du dictionnaire suivant :\n\n```python\nautres_donnees = [\n {\"ville\": \"Bordeaux\", \"pays\": \"France\", \"code_postal\": 33000},\n {\"ville\": \"Le Havre\", \"pays\": \"France\", \"code_postal\": 76600},\n {\"ville\": \"Lille\", \"pays\": \"France\", \"code_postal\": 59000},\n {\"ville\": \"Lyon\", \"pays\": \"France\", \"code_postal\": 69000},\n {\"ville\": \"Marseille\", \"pays\": \"France\", \"code_postal\": 13000},\n {\"ville\": \"Montpellier\", \"pays\": \"France\", \"code_postal\": 34000},\n {\"ville\": \"Nantes\", \"pays\": \"France\", \"code_postal\": 44000},\n {\"ville\": \"Nice\", \"pays\": \"France\", \"code_postal\": 6000},\n {\"ville\": \"Paris\", \"pays\": \"France\", \"code_postal\": 75000},\n {\"ville\": \"Reims\", \"pays\": \"France\", \"code_postal\": 51100},\n {\"ville\": \"Rennes\", \"pays\": \"France\", \"code_postal\": 35000},\n {\"ville\": \"Saint-Étienne\", \"pays\": \"France\", \"code_postal\": 42000},\n {\"ville\": \"Strasbourg\", \"pays\": \"France\", \"code_postal\": 67000},\n {\"ville\": \"Toulon\", \"pays\": \"France\", \"code_postal\": 83000},\n {\"ville\": \"Toulouse\", \"pays\": \"France\", \"code_postal\": 31000}\n]\n```\n\nRéaliser une jointure entre la liste existante ``donnees`` et la liste ``autres_donnees``, en utilisant la clé commune \"ville\" pour fusionner les informations des deux listes dans une nouvelle liste ?"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Fonction pour joindre deux listes de dictionnaires sur une clé commune\ndef jointer_listes(liste1, liste2):\n resultat = []\n for item1 in liste1:\n for item2 in liste2:\n if item1[\"ville\"] == item2[\"ville\"]:\n fusion = {}\n # Copier les clés et valeurs de item1\n for key, value in item1.items():\n fusion[key] = value\n # Copier les clés et valeurs de item2 (les valeurs de item2 écrasent celles de item1 en cas de conflit)\n for key, value in item2.items():\n fusion[key] = value\n resultat.append(fusion)\n return resultat\n\n\n# Autres données\nautres_donnees = [\n {\"ville\": \"Bordeaux\", \"pays\": \"France\", \"code_postal\": 33000},\n {\"ville\": \"Le Havre\", \"pays\": \"France\", \"code_postal\": 76600},\n {\"ville\": \"Lille\", \"pays\": \"France\", \"code_postal\": 59000},\n {\"ville\": \"Lyon\", \"pays\": \"France\", \"code_postal\": 69000},\n {\"ville\": \"Marseille\", \"pays\": \"France\", \"code_postal\": 13000},\n {\"ville\": \"Montpellier\", \"pays\": \"France\", \"code_postal\": 34000},\n {\"ville\": \"Nantes\", \"pays\": \"France\", \"code_postal\": 44000},\n {\"ville\": \"Nice\", \"pays\": \"France\", \"code_postal\": 6000},\n {\"ville\": \"Paris\", \"pays\": \"France\", \"code_postal\": 75000},\n {\"ville\": \"Reims\", \"pays\": \"France\", \"code_postal\": 51100},\n {\"ville\": \"Rennes\", \"pays\": \"France\", \"code_postal\": 35000},\n {\"ville\": \"Saint-Étienne\", \"pays\": \"France\", \"code_postal\": 42000},\n {\"ville\": \"Strasbourg\", \"pays\": \"France\", \"code_postal\": 67000},\n {\"ville\": \"Toulon\", \"pays\": \"France\", \"code_postal\": 83000},\n {\"ville\": \"Toulouse\", \"pays\": \"France\", \"code_postal\": 31000}\n]\n\n\n# Test\ndonnees_jointees = jointer_listes(donnees, autres_donnees)\nprint(\"Données jointes :\", donnees_jointees)","execution_count":22,"outputs":[{"output_type":"stream","text":"Données jointes : [{'ville': 'Bordeaux', 'superficie': 49.36, 'habitants': 254436, 'pays': 'France', 'code_postal': 33000}, {'ville': 'Le Havre', 'superficie': 46.95, 'habitants': 169733, 'pays': 'France', 'code_postal': 76600}, {'ville': 'Lille', 'superficie': 34.83, 'habitants': 233897, 'pays': 'France', 'code_postal': 59000}, {'ville': 'Lyon', 'superficie': 47.87, 'habitants': 522228, 'pays': 'France', 'code_postal': 69000}, {'ville': 'Marseille', 'superficie': 240.62, 'habitants': 870018, 'pays': 'France', 'code_postal': 13000}, {'ville': 'Montpellier', 'superficie': 56.88, 'habitants': 285121, 'pays': 'France', 'code_postal': 34000}, {'ville': 'Nantes', 'superficie': 65.19, 'habitants': 303382, 'pays': 'France', 'code_postal': 44000}, {'ville': 'Nice', 'superficie': 71.92, 'habitants': 342669, 'pays': 'France', 'code_postal': 6000}, {'ville': 'Paris', 'superficie': 105.4, 'habitants': 2148000, 'pays': 'France', 'code_postal': 75000}, {'ville': 'Reims', 'superficie': 46.9, 'habitants': 184076, 'pays': 'France', 'code_postal': 51100}, {'ville': 'Rennes', 'superficie': 50.39, 'habitants': 217728, 'pays': 'France', 'code_postal': 35000}, {'ville': 'Saint-Étienne', 'superficie': 79.97, 'habitants': 173089, 'pays': 'France', 'code_postal': 42000}, {'ville': 'Strasbourg', 'superficie': 78.26, 'habitants': 280966, 'pays': 'France', 'code_postal': 67000}, {'ville': 'Toulon', 'superficie': 42.84, 'habitants': 176198, 'pays': 'France', 'code_postal': 83000}, {'ville': 'Toulouse', 'superficie': 118.3, 'habitants': 471941, 'pays': 'France', 'code_postal': 31000}]\n","name":"stdout"}]}],"metadata":{},"nbformat":4,"nbformat_minor":2}